package com.my.core.page;

import java.util.ArrayList;
import java.util.List;

public class PageUtils {

    /**
     * list 集合内存分页
     * @param pageNumber
     * @param pageSize
     * @param data
     * @param <T>
     * @return
     */
    public static <T> PageInfo<T> selectPageList(int pageNumber, int pageSize, List<T> data) {
        int offset = (pageNumber - 1) * pageSize;
        int totalRow = data.size();
        int totalPage = totalRow / pageSize;
        boolean flag = true; // 分页是否刚好整除
        if (totalRow % pageSize != 0) {
            totalPage++;
            flag = false;
        }

        if (pageNumber > totalPage) {
            return new PageInfo<>(new ArrayList<>(), totalPage, totalRow);
        }

        int limit = offset + pageSize;
        if (limit >= totalRow) {
            if (offset < totalRow && !flag) {
                // 取最后一页所有元素
                int index = (totalPage - 1) * pageSize; // 最后一页之前的下标
                return new PageInfo<>(data.subList(index, totalRow), totalPage, totalRow);
            }
            //2022年7月7日15:30:45 发现最后一页刚好是出bug 修改
            return new PageInfo<>(data.subList(offset, totalRow), totalPage, totalRow);
//            return new PageInfo<>(new ArrayList<>(), totalPage, totalRow);
        }
        return new PageInfo(data.subList(offset, limit), totalPage, totalRow);
    }

}
